package com.ag.lwc.service.impl;

import java.util.Date;
import java.util.List;

import com.ag.bean.TbEvent;
import com.ag.bean.TbLog;
import com.ag.bean.TbLogType;
import com.ag.lwc.dao.MyLogDAO;
import com.ag.lwc.dao.MyTbLogTypeDAO;

public class LogService {
	private MyLogDAO logDAO;
	private MyTbLogTypeDAO logTypeDAO;

	public MyLogDAO getLogDAO() {
		return logDAO;
	}

	public static String LOG_ANNOUNCE = "1001"; // 通告
	public static String LOG_CONTACT = "1002"; // 通讯
	public static String LOG_EVENT_LEVEL_CHANGE = "1003"; // 事件等级变更
	public static String LOG_ADVICE = "1004"; // 处置建议
	public static String LOG_TASK_DISPATCH = "1005"; // 任务分派
	public static String LOG_TASK_FEEDBACK = "1006"; // 任务反馈
	public static String LOG_TASK_FINISH = "1007"; // 任务办结

	/**
	 * 
	 * @param content
	 *            日志内容
	 * @param eventId
	 *            事件ID
	 * @param logType
	 *            日志类型
	 * @param userName
	 *            发布日志用户名
	 */
	public void saveByUser(String content, String eventId, String logType,
			String userName) {
		StringBuilder contentString = new StringBuilder(userName);
		if (LOG_ANNOUNCE.equals(logType)) {
			contentString.append(" 于" + new Date() + "发布通告：");
			contentString.append(content);
		}
		if (LOG_CONTACT.equals(logType)) {
			contentString.append(" 于" + new Date() + "进行通讯：");
			contentString.append(content);
		}
		if (LOG_EVENT_LEVEL_CHANGE.equals(logType)) {

		}
		if (LOG_ADVICE.equals(logType)) {
			contentString.append(" 于" + new Date() + "提交处置报告：");
			contentString.append(content);
		}
		if (LOG_TASK_DISPATCH.equals(logType)) {
			contentString.append(" 于" + new Date() + "分派任务：");
			contentString.append(content);
		}
		if (LOG_TASK_FEEDBACK.equals(logType)) {
			contentString.append(" 于" + new Date() + "提交任务反馈：");
			contentString.append(content);
		}
		if (LOG_TASK_FINISH.equals(logType)) {
			contentString.append(" 于" + new Date() + "办结任务：");
			contentString.append(content);
		}

		TbLog log = new TbLog();
		if (eventId != null) {
			TbEvent event = new TbEvent();
			event.setEId(eventId);
			log.setTbEvent(event);
		}

		TbLogType type = new TbLogType();
		type.setLtId(logType);
		log.setTbLogType(type);
		log.setLogContent(content);
		log.setLogTime(new Date());
		logDAO.save(log);

	}

	/**
	 * 保存日志,传入日志类型,事件id，和日志类型id,日志类型id不能为空：
	 * 
	 * @param content
	 * @param eventId
	 * @param logType
	 */
	public void save(String content, String eventId, String logType) {
		TbLog log = new TbLog();
		if (eventId != null) {
			TbEvent event = new TbEvent();
			event.setEId(eventId);
			log.setTbEvent(event);
		}
		TbLogType type = new TbLogType();
		type.setLtId(logType);
		log.setTbLogType(type);
		log.setLogContent(content);
		log.setLogTime(new Date());
		logDAO.save(log);

	}

	// 保存日志,传入日志
	public void save(TbLog tbLog) {
		try {
			System.out
					.println("**********************保存日志**************************");
			logDAO.save(tbLog);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	// 保存处置建议日志,传入 日志内容,事件编号
	public void saveAdviceLog(String content, String eventId) {
		TbLogType type = new TbLogType();
		type.setLtId(LOG_ADVICE);
		TbLog log = new TbLog();
		log.setTbLogType(type);
		log.setLogContent(content);
		log.setLogTime(new Date());
		logDAO.save(log);

	}

	// 保存任务分派日志 传入日志内容，事件编号
	public void saveTaskAssignLog(String content, String eventId) {
		TbLogType type = new TbLogType();
		type.setLtId(LOG_TASK_DISPATCH);
		TbLog log = new TbLog();
		log.setTbLogType(type);
		log.setLogContent(content);
		log.setLogTime(new Date());
		logDAO.save(log);
	}

	// 保存任务反馈日志 传入日志内容，事件编号
	public void saveTaskFeedBackLog(String content, String eventId) {
		TbLogType type = new TbLogType();
		type.setLtId(LOG_TASK_FEEDBACK);
		TbLog log = new TbLog();
		log.setTbLogType(type);
		log.setLogContent(content);
		log.setLogTime(new Date());
	}

	// 保存通信日志 传入 日志内容
	public void saveContactLog(String content) {
		TbLogType type = new TbLogType();
		type.setLtId(LOG_CONTACT);
		TbLog log = new TbLog();
		log.setTbLogType(type);
		log.setLogContent(content);
		log.setLogTime(new Date());
		logDAO.save(log);

	}

	// 查询处置建议的日志，传入事件编号
	public List<TbLog> findAdviceLog(String eventId) {
		return null;

	}

	// 查询任务分派的日志，传入事件编号
	public List<TbLog> findTaskAssignLog(String eventId) {
		return null;

	}

	// 查询任务反馈的日志
	public List<TbLog> findTaskFeedBackLog(String eventId) {
		return null;

	}

	/*
	 * 在事件详情页面中load当前事件预案环节的日志
	 */
	public List<TbLog> findInAnalyse(String eventId, String maxTime) {
		System.out
				.println(maxTime
						+ "*****当前最大时间****************************************************************");
		StringBuilder sb = new StringBuilder();
		if (maxTime.equals("0")) {
			sb
					.append("from TbLog log join fetch log.tbLogType where log.tbEvent.EId = "
							+ eventId + " order by log.logTime asc ");
		} else {
			sb
					.append("from TbLog log join fetch log.tbLogType where log.tbEvent.EId = "
							+ eventId
							+ " and convert(varchar(100), log.logTime, 20) > '"
							+ maxTime + "' order by log.logTime asc");
		}
		System.out
				.println(sb.toString()
						+ "//////////////////////find new log in analyse//////////////////////////");
		return logDAO.findNew(sb.toString());
	}

	/* 根据预案环节步骤id查询其日志 */
	public List<TbLog> find(String psId, String maxTime) {
		System.out
				.println(maxTime
						+ "*****当前最大时间****************************************************************");
		if (psId == null) {
			return null;
		}
		StringBuilder sb = new StringBuilder();
		if (maxTime.equals("0")) {
			sb
					.append("from TbLog log join fetch log.tbLogType where log.tbLogPlanStep.psId = "
							+ psId + " order by log.logTime asc ");
		} else {
			sb
					.append("from TbLog log join fetch log.tbLogType where log.tbLogPlanStep.psId = "
							+ psId
							+ " and convert(varchar(100), log.logTime, 20) > '"
							+ maxTime + "' order by log.logTime asc");
		}
		System.out
				.println(sb.toString()
						+ "//////////////////////find new log//////////////////////////");
		System.out.println("\\");
		return logDAO.findNew(sb.toString());
	}

	public void setLogDAO(MyLogDAO logDAO) {
		this.logDAO = logDAO;
	}

	/* 根据预案环节步骤id和最近在页面上已经更新的日志id查找该环节需要更新的日志 */
	public List<TbLog> find_bak(String psId, String afterLogId) {
		if (psId == null || afterLogId == null)
			return null;
		// System.out.println("*******************Service: psId="+psId+"
		// afterLogId="+afterLogId);
		return logDAO.find_bak(psId, afterLogId);
	}
}
